package bank;

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
public class _24SwapPairNodes {
    public ListNode24 swapPairs(ListNode24 head) {
        //预处理
        if(head == null || head.next == null){
            return head;
        }
        //递归算法
        //*以后好好再研究一下吧！
        ListNode24 next = head.next;
        //假设后续的结点已经完全被递归函数处理好了
        //那么当前结点的后续就是后续结点的next对应的处理值！！！
        /**
         *   本来的代码应该是这样交换，但是如果把next的后续看成已经处理好的结果，那么就是递归
         *   head.next = next.next;
         *   next.next = head;
         *   head = next;
         */
        head.next = swapPairs(next.next);
        next.next = head;
        return next;
    }
    public class ListNode24 {
        int val;
        ListNode24 next;
         ListNode24() {}
         ListNode24(int val) { this.val = val; }
        ListNode24(int val, ListNode24 next) { this.val = val; this.next = next; }
    }
}
